package com.droid.faces;

import com.droid.persistor.dao.Categoria;
import com.droid.persistor.dao.Gasto;
import com.droid.persistor.dao.Objetivo;
import com.droid.persistor.dao.Recordatorio;
import com.droid.persistor.dao.Tipo_Gasto;
import com.droid.persistor.dao.Usuario;
import com.droid.persistor.facade.PersistorFacade;
import com.droid.users.facade.UsuarioFacade;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.event.RowEditEvent;

@ManagedBean
@SessionScoped
public class AutoCompleteObjetivoBean implements Serializable {

	private PersistorFacade pFacade = new PersistorFacade();
	private Objetivo ObjetivoSeleccionado;
	private List<Objetivo> Objetivos = new ArrayList<Objetivo>();
	private String monto, objetivo,nombre ;
	private Date objetivoDate;
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public void onEdit(RowEditEvent event) {

		try {

			Objetivo obj = (Objetivo) event.getObject();

			DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
			Date hoydate = new Date();
	    		    
			FacesContext context = FacesContext.getCurrentInstance();

			if (!hoydate.before(getDate())) {
				FacesMessage errorMessage = new FacesMessage(
						"La fecha de registro deber ser mayor a hoy");
				errorMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
				context.addMessage(null, errorMessage);

			} else {

				obj.setNombre(this.getNombre());
				obj.setFfin(dateFormat.format(getDate()));
				obj.setMonto(Float.parseFloat(this.monto));
				PersistorFacade pFacade = new PersistorFacade();
				pFacade.modificarObjetivo(obj);
			}

		} catch (Exception e) {

		}
	}

	public void setObjetivo(String obj) {
		this.objetivo = obj;
	}

	public String getObjetivo() {
		return this.objetivo;
	}

	// Objetivo
	public Objetivo getObjetivoSelecionado() {
		return ObjetivoSeleccionado;
	}

	public void setObjetivoSelecionado(Objetivo ObjetivoSeleccionado) {
		this.ObjetivoSeleccionado = ObjetivoSeleccionado;
	}

	public void setLObjetivos() {
	}

	public void eliminarObjetivo(Objetivo obj) {
		try {

			FacesContext context = FacesContext.getCurrentInstance();
			PersistorFacade facade = new PersistorFacade();
			if (obj.getIdObjetivo() != null) {
				facade.deleteObjetivo(obj);
				Recordatorio reco = facade.getRecordatorioGasto(obj.getIdObjetivo());
				if (reco.getIdRecordatorio() != null) {
					facade.deleteRecordatorio(reco.getIdRecordatorio());
				}
			}

		} catch (Exception e) {
			// Mensagens...
			System.out.println("Entro edit error");

		}
	}
	
	public ArrayList<Objetivo> getListaObjetivos() {

		LoginRequest lgt = (LoginRequest) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("loginRequest");
		PersistorFacade facade = new PersistorFacade();
		Usuario usu = facade.obtenerUsuario(lgt.getUsername());

		PersistorFacade pFacade = new PersistorFacade();
		String result[] = new String[3];
		// result = pFacade.checkObjetivo(usu.getIdUsuario());
		// result = pFacade.checkObjetivo(90);
		ArrayList<Objetivo> resp = pFacade.getListaObjetivosUsuario(usu
				.getIdUsuario());
		return resp;

	}

	public void setObjetivos(List<Objetivo> Objetivos) {
		this.Objetivos = Objetivos;
	}

	// Monto
	public void setMonto(String montopg) {
		this.monto = montopg;
	}

	public String getMonto() {
		return monto;
	}

	// Date
	public Date getDate() {
		return objetivoDate;
	}

	public void setDate(Date rdate) {
		this.objetivoDate = rdate;
	}

	public String objetivoAlta() {
		LoginRequest lgt = (LoginRequest) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("loginRequest");
		Gasto gto = new Gasto();
		String msg = null;
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		Date hoydate = new Date();

		FacesContext context = FacesContext.getCurrentInstance();

		if (!hoydate.before(getDate())) {
			FacesMessage errorMessage = new FacesMessage(
					"La fecha de registro deber ser mayor a hoy");
			errorMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, errorMessage);

			return (null);
		} else {

			PersistorFacade facade = new PersistorFacade();
			Usuario usu = facade.obtenerUsuario(lgt.getUsername());

			Objetivo obj = new Objetivo();
			String oDate = dateFormat.format(getDate());

			obj.setNombre(this.objetivo);
			obj.setFfinicio(dateFormat.format(hoydate));
			obj.setFfin(oDate);
			obj.setMonto(Float.parseFloat(this.monto));
			obj.setIdUsuario(usu.getIdUsuario());

			PersistorFacade pFacade = new PersistorFacade();
			pFacade.altaObjetivo(obj);

			return ("menu");
		}
	}
}
